package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import jdk.nashorn.internal.ir.ReturnNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Service
public class ItemCatServiceImpl implements ItemCatService {

    @Autowired
    private ItemCatMapper itemCatMapper ;

    public Map<Integer , List<ItemCat>> getmap(){
//        Map<Integer , List<ItemCat>> map = new HashMap<>();
//        List<ItemCat> list = itemCatMapper.selectList(null);
//        for(ItemCat itemCat:list){
//            int parentId=itemCat.getParentId();
//            if(map.containsKey(parentId)){
//                map.get(parentId).add(itemCat);
//            }else {
//                List<ItemCat> childrenList = new ArrayList<>();
//                childrenList.add(itemCat);
//                map.put(parentId,childrenList);
//            }
//        }
//        return map ;
    Map<Integer , List<ItemCat>> map = new HashMap<>();
    List<ItemCat> list = itemCatMapper.selectList(null);//查询所有的数据库记录
    for(ItemCat itemCat : list){
        int parentId = itemCat.getParentId();
        if(map.containsKey(parentId)){
            map.get(parentId).add(itemCat);
        }else {
            List<ItemCat> children = new ArrayList();
            children.add(itemCat);
            map.put(parentId, children);
        }
    }
        return map;
    }

    //该方法获取1-2级数据信息
    public List<ItemCat> gettwoList(Map<Integer, List<ItemCat>> map){
        List<ItemCat> oneList = map.get(0);
        for(ItemCat oneiteamCat:oneList){
            int parentId=oneiteamCat.getId();
            List<ItemCat> twoList = map.get(parentId);
            oneiteamCat.setChildren(twoList);
        }
    return oneList;
    }

    public List<ItemCat> getThreeList (Map<Integer,List<ItemCat>> map){
        List<ItemCat> oneList = gettwoList(map);
        for(ItemCat oneItemCat:oneList){
                List<ItemCat> twoList = oneItemCat.getChildren();
                if(twoList == null || twoList.size()==0){
                    continue;
                }
                for(ItemCat twoItemCat:twoList){
                    int parentId = twoItemCat.getId();
                    List<ItemCat> threeList = map.get(parentId);
                    twoItemCat.setChildren(threeList);
                }
        }
        return oneList ;
    }
    @Override   @Transactional
    public List<ItemCat> findItemCatList(Integer level) {
     Map<Integer , List<ItemCat>> map = getmap();
     if(level == 1){
         return map.get(0);
     }
    if(level == 2 ){
        return gettwoList(map);
    }
    return getThreeList(map);
    }

    @Override   @Transactional
    public void saveItemCat(ItemCat itemCat) {
      //  Date date = new Date();
        itemCat.setStatus(true);
                //.setCreated(date)
                //.setUpdated(date);
        itemCatMapper.insert(itemCat);
    }

    @Override
    @Transactional
    public void delete(ItemCat itemCat) {
//        if(itemCat.getLevel()==3){
//            int id = itemCat.getId();
//            itemCatMapper.deleteById(id);
//        return;
//        }
//        if(itemCat.getLevel()==2){
//            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper();
//            int id = itemCat.getId();
//            queryWrapper.eq("parent_id",id);
//            itemCatMapper.delete(queryWrapper);
//            itemCatMapper.deleteById(id);
//            return;
//        }
//        QueryWrapper queryWrapper = new QueryWrapper();
//        int id = itemCat.getId();
//        queryWrapper.eq("parent_id",id);
//        List idList = itemCatMapper.selectObjs(queryWrapper);
//
//        if(idList.size()>0){
//            queryWrapper.clear();
//            queryWrapper.in("parent_id", idList);
//            itemCatMapper.delete(queryWrapper);
//            idList.add(id);
//            itemCatMapper.deleteBatchIds(idList);
//        }else{
//            itemCatMapper.deleteById(id);
//        }
        if(itemCat.getLevel() == 3 ){
            Integer id = itemCat.getId();
            itemCatMapper.deleteById(itemCat.getId());
            return;
        }if(itemCat.getLevel() == 2 ){
            QueryWrapper queryWrapper = new QueryWrapper();
            int id = itemCat.getId();
            queryWrapper.eq("parent_id", id);
            itemCatMapper.delete(queryWrapper);
            itemCatMapper.deleteById(id);
            return;
        }
        QueryWrapper queryWrapper = new QueryWrapper();
        int id = itemCat.getId();
        queryWrapper.eq("parent_id",id);
        List idList = itemCatMapper.selectObjs(queryWrapper);
        if(idList.size()>0){
            queryWrapper.clear();
            queryWrapper.in("parent_id", idList);
            itemCatMapper.delete(queryWrapper);
            idList.add(id);
            itemCatMapper.deleteBatchIds(idList);
        }else {
            itemCatMapper.deleteById(id);
        }
    }
    @Override   @Transactional
    public void updataSatus(ItemCat itemCat) {
        /*id当做唯一条件
        * 其他不为null的作为set条件*/
        itemCatMapper.updateById(itemCat);
    }

    @Override   @Transactional
    public void updateItemCat(ItemCat itemCat) {
        ItemCat temp = new ItemCat();
        temp.setId(itemCat.getId())
                .setName(itemCat.getName());
        itemCatMapper.updateById(temp);
    }
}